using System;
using System.Collections.Generic;
using System.Text;
using CapaDatos;
using System.Collections;


namespace CapaNegocio
{
    public class Cliente:IBaseDeDatos
    {
        #region atributos
        private int id;
        private TipoDoc tipoDoc;
        private String nombre;
        private String nroDoc;
        private String email;
        private String telefono;
        private String localidad;
        private String direccion;
        private String apellido;
        #endregion

        #region getters y setters


        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public String NroDoc
        {
            get { return nroDoc; }
            set { nroDoc = value; }
        }
   

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
       
        public String Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }
        

        public String Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }
       

        public String Localidad
        {
            get { return localidad; }
            set { localidad = value; }
        }
  

      
        public String Email
        {
            get { return email; }
            set { email = value; }
        }
       

        public String Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        public string Figuracion
        {
            get { return nombre+", "+Apellido; }
           
        }

        public TipoDoc TipoDoc
        {
            get { return tipoDoc; }
            set { tipoDoc = value; }
        }

        #endregion 

        #region clientes
       
        public Cliente(){
            nroDoc = "";
            nombre = "";
            apellido = "";
            email = "";
            telefono = "";
            localidad = "";
            direccion = "";
        }

        #endregion

        #region metodos estaticos
            public static bool crearCliente(ArrayList datos)
            {
                return ServidorDatos.registrarCliente(datos);
            }
            public static Cliente buscarCliente(String pTipo,  String pNroDoc)
            {
                ArrayList cliente = ServidorDatos.buscarCliente(pTipo, pNroDoc);
                if (cliente.Count == 1)
                {
                    Cliente c = new Cliente();
                    c.buildObject((ArrayList)cliente[0]);
                    return c;
                }
                else
                {
                    return null;
                }  

              
            }

        


            
            public static Cliente buscarCliente(int codigo)
            {
                ArrayList cliente = ServidorDatos.buscarCliente(codigo);
                Cliente c = null;
                if (cliente.Count == 1)
                {
                    c = new Cliente();
                    c.buildObject((ArrayList)cliente[0]);
                   
                }
                return c; 
            }
        #endregion

        #region metodos de instancia
        public bool modificarCliente(ArrayList datos)
        {
            return ServidorDatos.modificarCliente(datos);
        }
        public bool eliminarCliente()
        {
            if (ServidorDatos.buscarPresupuestos(this.id))
                return ServidorDatos.eliminarCliente(this.TipoDoc.Codigo,this.nroDoc);
            else
                return false;

        }
        #endregion

        #region construye objeto
        public void buildObject(ArrayList lista)
        {
            this.nroDoc = lista[0].ToString();
            this.nombre = lista[1].ToString();
            this.apellido = lista[2].ToString();
            this.direccion = lista[3].ToString();
            this.localidad = lista[4].ToString();
            this.email = lista[5].ToString();
            this.Telefono = lista[6].ToString();
            this.Id = Convert.ToInt32(lista[7].ToString());
            this.tipoDoc = TipoDoc.buscarTipoDoc(Convert.ToInt32(lista[8].ToString()));
            
        }

        #endregion



        public String TipoYNumDoc
        {
            get { return tipoYNum(); }
        }

        public string tipoYNum()
        {
            return TipoDoc.Nombre + " - " + nroDoc;
        }

        public static List<Cliente> buscarClientes()
        {
            ArrayList clientesBD = ServidorDatos.buscarClientes();
            List<Cliente> clientes = new List<Cliente>();
            for (int i = 0; i < clientesBD.Count; i++)
            {
                Cliente o = new Cliente();
                o.buildObject((ArrayList)clientesBD[i]);
                clientes.Add(o);
            }
            return clientes;
        }

      
    }




}
